package misListasDobles;

public class ListasDobles {
	
	private NodeDoble inicio;
	
	public ListasDobles(){
		
		inicio = null;
	} 
	
	public NodeDoble getInicio(){
	     
		return inicio;
	}
	
	public void setInicio(NodeDoble valor){
		
		inicio = valor;	
	}
	
	public boolean listaVacia(){
		
		return(inicio == null);  
	}
	
	public void agregarInicio(String valor){
		
		NodeDoble nodeNew = new NodeDoble(valor,inicio,null);
			
		if(listaVacia())
		{
			setInicio(nodeNew);
			nodeNew.setNext(nodeNew);
			nodeNew.setBack(nodeNew);
			
		}
		else{

            nodeNew.setNext(getInicio());
            nodeNew.setBack(inicio.getBack());
            inicio.setBack(nodeNew);
            nodeNew.getBack().setNext(nodeNew);
            setInicio(nodeNew);

		}

	}
	
	public void agregarFinal(String valor){
		
		NodeDoble nodeNew = new NodeDoble(valor, null, null);
    		
		if(listaVacia()) agregarInicio(valor);	
		{
            inicio.getBack().setNext(nodeNew);
            nodeNew.setBack(inicio.getBack());
            inicio.setBack(nodeNew);
            nodeNew.setNext(inicio);

            }
		}
	
	public String borrarFinal(){
			
		
		String valor = "";
		NodeDoble aux = inicio.getBack();
		
		if(listaVacia()) valor = "LISTA VACIA";
		else{
			
				

	                valor = aux.getData();
	                aux.getBack().setNext(inicio);
	                inicio.setBack(aux.getBack());
	                aux.setBack(null);
	                aux.setNext(null);

			    
	                
			}
			return valor;
			}
	
	public String borrarInicio(){
		
		NodeDoble aux = getInicio();
		String valor = "";
		
		if(listaVacia()) valor = "Lista Vacia";
		else{              
			
            valor = inicio.getData();

            inicio.getBack().setNext(inicio.getNext());
            inicio.getNext().setBack(inicio.getBack());
            inicio.setBack(null);
            inicio = inicio.getNext();
            aux.setNext(null);

			
		}
		
		return valor;
	}
	
	public String toString(){

		  String Lista = "";
	          NodeDoble aux = getInicio();
	          if (!listaVacia()) {

	              do {

	                  Lista +=  aux.getData() + "->";
	                  aux = aux.getNext();
	              } 
	              while(aux != getInicio());

	          }

		  return Lista;

		}
	
	public String toStringInverso(){

		  String Lista = "";
	      NodeDoble aux = getInicio();
	      
	      if(!listaVacia()){

	              do{

	                  Lista +=  aux.getBack().getData() + "<-";
	                  aux = aux.getBack();
	              } 
	              while(aux != getInicio());

	      }

		  return Lista;

		}
	  	
	}
